package chapter5.additional;

public class RecursionExample {

    /**
     * 递归计算阶乘的方法
     * @param n 要计算阶乘的数字
     * @return n的阶乘
     */
    public static int factorial(int n) {
        // 1. 基本情况（递归终止条件）
        // 0的阶乘是1，这是数学定义
        if (n == 0) {
            System.out.println("到达基本情况：factorial(0) = 1");
            return 1;
        }

        // 2. 递归情况
        // n! = n * (n-1)! 这是阶乘的递归定义
        System.out.println("计算 factorial(" + n + ") = " + n + " * factorial(" + (n-1) + ")");
        int result = n * factorial(n - 1);

        System.out.println("返回 factorial(" + n + ") = " + result);
        return result;
    }

    public static void main(String[] args) {
        int number = 4;
        System.out.println("开始计算 " + number + " 的阶乘...");
        int result = factorial(number);
        System.out.println(number + "! = " + result);
    }
}